In GNU C, you may use dollar signs in identifier names. This is because many traditional C implementations allow such identifiers.
On some machines, dollar signs are allowed in identifiers if you specify -traditional . On a few systems they are allowed by default, even if you do not use -traditional . But they are never allowed if you specify -ansi .
There are certain ANSI C programs (obscure, to be sure) that would compile incorrectly if dollar signs were permitted in identifiers. For example:
#define foo(a) #a
#define lose(b) foo (b)
#define test$ lose (test)